
// object 表示一个对象
let a: object; // 开发时用的少
a = {}
a = function () { }; // 函数也是一个对象


// {} 用来指定对象中包含哪些属性
let b: { name: string }; // 变量b 存储的也是一个对象
// {属性名:属性类型...} 指定对象类型，一般是同时指定对象包含哪些属性
b = { name: '路飞' };  // 结构必须一样
let aw: { name: string, sex: '男' | '女' }


// 在属性名后加上一个 ?  表示这个属性是可选的
let bb: { name: string, age?: number };
bb = { name: '路飞', age: 18 }; // 属性名称必须和定义的一样
bb = { name: '索隆' };

/* 
    对象类型限制
    [属性名:属性名的类型]:属性值类型
    [propName: string]: any 表示任意类型的属性
 */
// [propName: string] 属性名为string类型（js中属性名都为string类型） []: any 任意类型属性值
let c: { name: string, [propName: string]: any };
c = { name: "弗兰奇", age: 22, sex: '男' };


/* 
    函数类型限制
    限制函数类型 设置函数结构的类型声明：
    语法：(参数: 类型, 参数: 类型,...) => 返回值类型
 */
let d: (a: number, b: number) => number; // 参数a b 都要是数字，返回值必须是数字

d = function (a, b) {
    return a + b;
}

